Modern high speed data processing machines are being adapted for multi-user environments. One approach for adapting a single machine to a multi-user environment involves assigning a logical processor to each user. The logical processor behaves as if it had access to the full facilities of the data processing machine while system control confines the access of the logical processor to a specified domain of storage space and related hardware. In this manner, the various logical processors in a single machine do not overlap in storage. However, to simplify the user interface, the restricted access of the logical processor is transparent to that processor. Thus, instructions and addresses running in the machine do not specify a particular domain within which they are to be executed or used for accessing data.
A domain is a processing environment which consists of main storage, channels, operator facilities and logical processors that execute instructions. When activated in a preferred embodiment, a domain has the facilities described in the IBM System/370 Principles of Operation, or the IBM System/370 Extended Architecture Principles of Operation. These resources are controlled by a system control program and are collectively called the domain of the program.
When a system control program takes over in a machine, its domain is activated by macrocode, allocating the amount of storage, the number of channels and logical processors required. The system control programs and macrocode allocating a domain operate in a machine state called control state. Control state has dedicated main storage called system storage which is addressed with system addresses.
Programs run in a logical processor, known as domain programs, operate in a machine state called user state. The main storage allocated to a domain is called domain storage and domain storage accesses use domain addresses.
At times it is necessary for a program running in control state to access data stored in domain storage. This occurs, for instance, during emulation as discussed below.
A data processing machine is designed to implement a set of instructions known as machine instructions. After the architecture of the machine is defined, it is often desirable to implement instructions other than those in the machine set. This is accomplished by storing an emulation program of instructions in system storage that can be run in control state to emulate a new instruction.
When an instruction to be emulated is encountered by a logical processor, a branch to the control state is taken and the instruction is emulated.
Upon branch to the control state, it is necessary to test for program exceptions that apply to the emulation routine to be run in the control state. These tests take several lines of code in the emulation program and result in a decrease in performance of emulated instructions.
Also, in order to emulate some instructions, it is necessary for the emulation program in system storage running in the control state to access operands or other data stored in domain storage.
As discussed above, the instructions and addresses generated by logical processors do not specify whether a particular address is to be treated as a domain address or a system address.
In order to provide for this domain crossing during emulation, the prior art specified special instructions for emulation that operated in the control state and provided for access to domain storage. However, this implementation of special instructions resulted in only a limited number of instructions that could implement the domain crossing access and was costly to implement.